NIO2 API(java.nio)是java SE 7所推出的新API,剛開始學java的時候是用舊的IO API(java.io),開啟/寫入檔案基本功能而言(FileInputStream/FileOutputStream),個人感覺是新舊差異不大,但對路徑/檔案的操作就所差異,或是說更加方便,NIO中的Path用於路徑的操作(組合/擷取路徑資訊),Files用於檔案操作(複製/新增/刪除...),細部可參考java.nio.file.Path, java.nio.file.Files,比較新奇的功能是FileVisitor,用於掃描特定資料夾下的檔案與資料夾資訊,Part 1 demo在特定資料夾下尋找mp4檔,要實現掃描資料的功能必須呼叫walkFileTree方法,並傳入Path以及實作FileVisitor物件,實作FileVisitor必須要有四個方法要定義,對新手來說有點麻煩,所以有一SimpleFileVisitor類別可供繼承,本例使用visitFile來掃描資料夾裡.mp4檔,可設定於不同條件下可傳回不同的狀態來決定掃描是否繼續進行,程式碼如下。
package nio;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class PathTest {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Path file = Paths.get("H:\\seo.sql");
BasicFileAttributes attrs=Files.readAttributes(file, BasicFileAttributes.class);
System.out.println(attrs.creationTime());
System.out.println(attrs.lastModifiedTime());
System.out.println(attrs.size()/1000000);
Path rootD=Paths.get("E:\\youtube"); //取得要掃描的目錄
Files.walkFileTree(rootD, new FindMp4Visitor()); //呼叫walkFileTree方法,
//須傳入Path以及實作FileVisitor的物件
}
public static class FindMp4Visitor extends SimpleFileVisitor<Path>{ //SimpleFileVisitor是最簡單易用實作FileVisitor的類別
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs){//掃描檔案
if(file.toString().endsWith(".mp4")){//如果檔案結尾為.mp4
System.out.println(file.getFileName());
}
return FileVisitResult.CONTINUE; //繼續往下找
}
}
}
FileVisitor必須定義的四個方法: